#include <iostream>
#include <vector>

using namespace std;

const int MOD = 1e9 + 7;

class Solution
{
public:
    int f(int i, int j, vector<vector<int>>& dp)
    {
        if (dp[i][j] == -1)
        {
            if (i == 1)
                return j;
            if (j == 1)
                return 1;

            int ret = 0;
            for (int m = 1; m <= j; ++m)
            {
                ret %= MOD;
                ret += f(i - 1, j / m, dp) % MOD ;
            }
            dp[i][j] = ret;
            return ret;
            // cout << "i = " << i << " j = " << j << endl;
            // cout << "ret :" << ret << endl;
        }
        else
            return dp[i][j];
    }

    int idealArrays(int n, int maxValue)
    {

        vector<vector<int>> dp;
        dp.resize(n + 1);
        for (auto &e : dp)
            e.resize(maxValue + 1, -1);
        return f(n, maxValue, dp);
    }
};
#define NUM_MAX 2000

int main()
{
    Solution sl;
    for (int i = 50; i < NUM_MAX; i += 50)
    {
        for (int j = 50; j < NUM_MAX; j += 50)
        {
            cout << "i: " << i << " j: " << j << " ret: " << sl.idealArrays(i, j) << endl;
        }
    }
    // cout << "i: " << "37" << " j: " << "71" << " ret: " << sl.idealArrays(300, 300) << endl;
    return 0;
}
